package com.egao.common.module.push.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.egao.common.core.web.PageParam;
import com.egao.common.module.push.entity.PushMsg;
import com.egao.common.module.push.param.PushMsgParam;
import com.egao.common.module.push.vo.CollegeCountVO;
import com.egao.common.module.student.entity.vo.StudentPushVO;
import com.egao.common.module.student.entity.vo.StudentRecommendVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 消息推送表(PushMsg)表数据库访问层
 *
 * @author makejava
 * @since 2021-03-03 16:31:21
 */
@Repository
public interface PushMsgMapper extends BaseMapper<PushMsg> {
    /**
     * 批量插入推送数据
     * @param list 推送消息集合
     */
    void batchInsert(@Param("list") List<PushMsg> list);
    /**
     * 批量插入能力推送数据
     * @param list 推送消息集合
     */
    void batchInsertAbility(@Param("list") List<PushMsg> list);
    /**
     * 临时批量插入推送数据，服务于老数据导入
     * @param list 推送消息集合
     */
    void batchImport(@Param("list") List<PushMsg> list);
    /**
     * 查询需要推送的信息
     * @param id 业务编号
     * @param type 业务类型
     * @return
     */
    List<StudentPushVO> findStudentListByBusinessId(@Param("tableName") String tableName, @Param("id") Integer id, @Param("type") String type);
    /**
     * 查询需要推送的信息
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return
     */
    List<StudentPushVO> listPreachStudentId(@Param("tableName") String tableName, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询需要索引数据
     * @param start 起始值
     * @param end 终止值
     * @return 推荐信息列表
     */
    List<PushMsg> initIndex(@Param("start") Integer start, @Param("end") Integer end);
    /**
     * 查询需要索引数据
     * @param page 终止值
     * @return 推荐信息列表
     */
    List<StudentRecommendVO> selectByStudentId(@Param("page") PageParam<StudentRecommendVO> page);

    /**
     * 动态插入单条数据
     * @param tableName
     * @param msg
     */
    int dynamicInsert(@Param("tableName") String tableName, @Param("msg") PushMsg msg);

    /**
     * 动态更新单条数据
     * @param tableName
     * @param msg
     */
    void dynamicUpdate(@Param("tableName") String tableName, @Param("msg") PushMsg msg);

    /**
     * 动态查询数据
     * @param tableName
     * @param msg
     */
    List<PushMsg> dynamicSelect(@Param("tableName") String tableName, @Param("msg") PushMsg msg);

    /**
     * 动态统计
     * @param tableName 表名
     * @param pushMsgParam 参数
     * @return
     */
    Long dynamicSelectCount(@Param("tableName") String tableName, @Param("param") PushMsgParam pushMsgParam);

    /**
     * 动态统计所有学院的所有消息推送总数
     * @param tableName 表名
     * @return
     */
    List<CollegeCountVO> dynamicCollegeCount(@Param("tableName") String tableName);

    /**
     * 动态统计所有学院的所有已浏览消息推送总数
     * @param tableName 表名
     * @param pushMsgParam 表名
     * @return
     */
    List<CollegeCountVO> dynamicCollegeReadCount(@Param("tableName") String tableName, @Param("param") PushMsgParam pushMsgParam);

    /**
     * 动态统计所有学院的所有已推送简历消息总数
     * @param tableName 表名
     * @param pushMsgParam 表名
     * @return
     */
    List<CollegeCountVO> dynamicCollegeResumeCount(@Param("tableName") String tableName, @Param("param") PushMsgParam pushMsgParam);

    /**
     * 根据年份分组查询所有的推送信息
     * @param tableName
     * @return
     */
    List<PushMsg> getAllPushMsg(@Param("tableName") String tableName);
}